package com.lrm.config;

import com.lrm.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * @Author: 王金海
 * @Description:
 * @Date: Created by Administrator on 2017/11/30.
 * @Modified By:
 */
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/admin/*")
                .excludePathPatterns("/admin/login");
        super.addInterceptors(registry);
    }

    /**
     * 设置可以跨域
     *
     * addMapping：配置可以被跨域的路径，可以任意配置，可以具体到直接请求路径。
     allowedMethods：允许所有的请求方法访问该跨域资源服务器，如：POST、GET、PUT、DELETE等。
     allowedOrigins：允许所有的请求域名访问我们的跨域资源，可以固定单条或者多条内容，如："http://www.baidu.com"，只有百度可以访问我们的跨域资源。
     allowedHeaders：允许所有的请求header访问，可以自定义设置任意请求头信息，如："X-YAUTH-TOKEN"
     *
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("*")
                .allowedHeaders("*")
                .allowedOrigins("*");

    }


//    @Override
//    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//        super.configureMessageConverters(converters);
//        //1.需要定义一个convert转换消息的对象;
//        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//        //2.添加fastJson的配置信息，比如：是否要格式化返回的json数据;
//        FastJsonConfig fastJsonConfig = new FastJsonConfig();
//        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
//        //3处理中文乱码问题
//        List<MediaType> fastMediaTypes = new ArrayList<>();
//        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//        //4.在convert中添加配置信息.
//        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
//        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
//        //5.将convert添加到converters当中.
//        converters.add(fastJsonHttpMessageConverter);
//    }


    /**
     * 消息转换器
     * @param converters
     */
//    @Override
//    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//        //调用父类配置
//        super.configureMessageConverters(converters);
//        //创建消息转换器
//        FastJsonHttpMessageConverter messageConverter = new FastJsonHttpMessageConverter();
////        messageConverter.setSupportedMediaTypes(Arrays.asList(
////                new MediaType("text", "plain", Charset.forName("utf-8")),
////                new MediaType("text", "html", Charset.forName("utf-8")),
////                new MediaType("application", "json", Charset.forName("utf-8")),
////                new MediaType("text", "json", Charset.forName("utf-8")),
////                new MediaType("application", "x-www-form-urlencoded", Charset.forName("utf-8")),
////                new MediaType("application", "xml", Charset.forName("utf-8")),
////                new MediaType("text", "xml", Charset.forName("utf-8"))
////        ));
//        //创建配置类
//        FastJsonConfig fastJsonConfig = new FastJsonConfig();
//        //返回内容的过滤
//        /**
//         * WriteNullListAsEmpty  ：List字段如果为null,输出为[],而非null
//         WriteNullStringAsEmpty ： 字符类型字段如果为null,输出为"",而非null
//         DisableCircularReferenceDetect ：消除对同一对象循环引用的问题，默认为false（如果不配置有可能会进入死循环）
//         WriteNullBooleanAsFalse：Boolean字段如果为null,输出为false,而非null
//         WriteMapNullValue：是否输出值为null的字段,默认为false。
//         */
//        fastJsonConfig.setSerializerFeatures(
//                SerializerFeature.DisableCircularReferenceDetect,
//                SerializerFeature.WriteMapNullValue,
//                SerializerFeature.WriteNullListAsEmpty,
//                SerializerFeature.WriteNullStringAsEmpty,
//                SerializerFeature.WriteNullBooleanAsFalse
//        );
//        messageConverter.setFastJsonConfig(fastJsonConfig);
//        //将fastjson放到视图消息转换列表
//        converters.add(messageConverter);
//    }
}
